namespace NHibernate.Br.Exemplos.Core.Tests.Repository
{
    using Cfg;
    using Core.Repository;
    using Model;
    using NUnit.Framework;
    using Tool.hbm2ddl;

    [TestFixture]
    public class BaseNHRepositoryTestCase
    {
        private bool IsInitalized;

        private NHPessoaRepository repository;

        private ISessionFactory sessionFactory;

        [SetUp]
        public void Init()
        {
            if (!IsInitalized)
            {
                Configuration cfg = new Configuration();

                cfg.AddAssembly("NHibernate.Br.Exemplos.Core.Tests");

                SchemaExport schema = new SchemaExport(cfg);

                schema.Drop(false, true);
                schema.Create(false, true);

                sessionFactory = cfg.BuildSessionFactory();

                IsInitalized = true;
            }
        }

        [Test]
        public void ShouldAddNewPessoaWhenAddInvoked()
        {
            using (ISession session = sessionFactory.OpenSession())
            {
                repository = new NHPessoaRepository(session);

                Pessoa pessoa = new Pessoa("Alan Turing");

                repository.Add(pessoa);

                Assert.IsTrue(pessoa.Id > 0);
            }
        }
    }
    
    public class NHPessoaRepository: BaseNHRepository<Pessoa>
    {
        public NHPessoaRepository(ISession session) : base(session)
        {

        }
    }
}